package com.jindi.jacococli.biz.utils;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jindi.jacococli.biz.business.model.ServiceProject;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Type;
import java.util.List;

@Slf4j
public class JSONUtils {

    private static Gson gson = new Gson();

    /**
     * 对象转JSON字符串
     *
     * @param obj 对象
     * @return
     */
    public static String toJSONString(Object obj) {
        if (obj == null) {
            return null;
        }
        return gson.toJson(obj);
    }

    /**
     * JSON字符串转POJO对象
     *
     * @param data  JSON字符串
     * @param clazz POJO类
     * @param <T>
     * @return
     */
    public static <T> T parseObject(String data, Class<T> clazz) {
        if (data == null || clazz == null) {
            return null;
        }
        return gson.fromJson(data, clazz);
    }

    /**
     * JSON字符串转POJO对象
     *
     * @param data JSON字符串
     * @param type POJO类
     * @param <T>
     * @return
     */
    public static <T> T parseObject(String data, Type type) {
        if (data == null || type == null) {
            return null;
        }
        return gson.fromJson(data, type);
    }

    /**
     * JSON字符串转列表
     *
     * @param data JSON字符串
     * @param clazz 元素类型
     * @param <T>
     * @return
     */
    public static <T> List<T> parseArray(String data, Class<T> clazz) {
        if (data == null || clazz == null) {
            return null;
        }
        return gson.fromJson(data, new TypeToken<List<T>>() {
        }.getType());
    }

    public static <T> List<T> parseServiceProject(String data) {
        return gson.fromJson(data, new TypeToken<List<ServiceProject>>() { }.getType());
    }
}
